今天我將遊戲中原先依賴靜態 JSON 資料的部分,改為使用 Google Apps Script(GAS)來動態抓取 Google Sheet 的內容。這樣一來,我能夠更靈活地調整時間軸的各項元素內容。資料結構中還包括了 'point' 和 'step' 這兩個參數,讓我們能夠有效控制答案卡片的出現順序以及玩家所獲得的分數。
這種實作方式特別適用於規模較小、不需過於複雜資料邏輯和內容的專案。
原本的 JSON 檔案內容
[
  {
    "year": "1990",
    "event": "WorldWideWeb瀏覽器問世",
    "description": "Tim Berners-Lee創建了第一個瀏覽器WorldWideWeb,標誌著網絡的開端。",
    "image": "https://i.imgur.com/3SGG1eL.jpg",
    "point": 3,
    "step": 7,
    "offsetPath": "path('M 0 0 L -461.214 612.21')",
    "animationDelay": "-5s"
  },
  {
    "year": "1995",
    "event": "JavaScript語言誕生",
    "description": "Netscape推出了JavaScript,成為首個在瀏覽器中運行的腳本語言,帶動了互動式網頁的發展。",
    "image": "https://i.imgur.com/tL8qcNq.jpg",
    "point": 4,
    "step": 1,
    "offsetPath": "path('M 0 0 L -1167.84 -325.75')",
    "animationDelay": "-3.625s"
  },
  //下略 
]
Apps Script 是一款雲端 JavaScript 平台,可整合及自動執行各項 Google 產品的工作。
參考文件
在 google sheet 建立一個 excel 檔案,並開啟寫入權限
Apps Script 程式碼
function doGet() {
  var id = 'MY_ID';
  var spreadsheet = SpreadsheetApp.openById(id); // Sheet id
  var sheet = spreadsheet.getSheets()[1]; // 要第幾個sheet? 0 就是第一個
  var data = sheet.getDataRange().getValues(); // 取得的資料
  
  var dataExport = [];
  for(var i = 1; i < data.length; i++) {
    
    dataExport.push({
      year: data[i][0],
      event: data[i][1],
      description: data[i][2],
      image: data[i][3],
      point: data[i][4],
      step: data[i][5],
      offsetPath: data[i][6],
      animationDelay: data[i][7]
    })
    
  }
  var dataExportFormat = JSON.stringify(dataExport);
  return ContentService.createTextOutput(dataExportFormat)
            .setMimeType(ContentService.MimeType.JSON);
}
開啟 Apps Script 平台,並寫好程式之後部署執行
部署之後就會得到一個 ajax 抓取資料使用的網址。
import { ref } from 'vue';
const clues = ref([]);
const getClues = async () => {
    const uri = '部署拿到的網址';
    const { data } = await axios.get(uri);
    clues.value = data;
};
getClues();
